{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Modeling and Simulation in Python\n",
    "\n",
    "Chapter 3\n",
    "\n",
    "Copyright 2017 Allen Downey\n",
    "\n",
    "License: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Configure Jupyter so figures appear in the notebook\n",
    "%matplotlib inline\n",
    "\n",
    "# Configure Jupyter to display the assigned value after an assignment\n",
    "%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'\n",
    "\n",
    "# import functions from the modsim library\n",
    "from modsim import *\n",
    "\n",
    "# set the random number generator\n",
    "np.random.seed(7)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## More than one State object\n",
    "\n",
    "Here's the code from the previous chapter, with two changes:\n",
    "\n",
    "1. I've added DocStrings that explain what each function does, and what parameters it takes.\n",
    "\n",
    "2. I've added a parameter named `state` to the functions so they work with whatever `State` object we give them, instead of always using `bikeshare`.  That makes it possible to work with more than one `State` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def step(state, p1, p2):\n",
    "    \"\"\"Simulate one minute of time.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    p1: probability of an Olin->Wellesley customer arrival\n",
    "    p2: probability of a Wellesley->Olin customer arrival\n",
    "    \"\"\"\n",
    "    if flip(p1):\n",
    "        bike_to_wellesley(state)\n",
    "    \n",
    "    if flip(p2):\n",
    "        bike_to_olin(state)\n",
    "        \n",
    "def bike_to_wellesley(state):\n",
    "    \"\"\"Move one bike from Olin to Wellesley.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    \"\"\"\n",
    "    state.olin -= 1\n",
    "    state.wellesley += 1\n",
    "    \n",
    "def bike_to_olin(state):\n",
    "    \"\"\"Move one bike from Wellesley to Olin.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    \"\"\"\n",
    "    state.wellesley -= 1\n",
    "    state.olin += 1\n",
    "    \n",
    "def decorate_bikeshare():\n",
    "    \"\"\"Add a title and label the axes.\"\"\"\n",
    "    decorate(title='Olin-Wellesley Bikeshare',\n",
    "             xlabel='Time step (min)', \n",
    "             ylabel='Number of bikes')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And here's `run_simulation`, which is a solution to the exercise at the end of the previous notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_simulation(state, p1, p2, num_steps):\n",
    "    \"\"\"Simulate the given number of time steps.\n",
    "    \n",
    "    state: State object\n",
    "    p1: probability of an Olin->Wellesley customer arrival\n",
    "    p2: probability of a Wellesley->Olin customer arrival\n",
    "    num_steps: number of time steps\n",
    "    \"\"\"\n",
    "    results = TimeSeries()    \n",
    "    for i in range(num_steps):\n",
    "        step(state, p1, p2)\n",
    "        results[i] = state.olin\n",
    "        \n",
    "    plot(results, label='Olin')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can create more than one `State` object:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin         10\n",
       "wellesley     2\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bikeshare1 = State(olin=10, wellesley=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin          2\n",
       "wellesley    10\n",
       "dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bikeshare2 = State(olin=2, wellesley=10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Whenever we call a function, we indicate which `State` object to work with:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "bike_to_olin(bikeshare1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "bike_to_wellesley(bikeshare2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And you can confirm that the different objects are getting updated independently:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin         11\n",
       "wellesley     1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bikeshare1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin          1\n",
       "wellesley    11\n",
       "dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bikeshare2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Negative bikes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the code we have so far, the number of bikes at one of the locations can go negative, and the number of bikes at the other location can exceed the actual number of bikes in the system.\n",
    "\n",
    "If you run this simulation a few times, it happens often."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "bikeshare = State(olin=10, wellesley=2)\n",
    "run_simulation(bikeshare, 0.4, 0.2, 60)\n",
    "decorate_bikeshare()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can fix this problem using the `return` statement to exit the function early if an update would cause negative bikes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "def bike_to_wellesley(state):\n",
    "    \"\"\"Move one bike from Olin to Wellesley.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    \"\"\"\n",
    "    if state.olin == 0:\n",
    "        return\n",
    "    state.olin -= 1\n",
    "    state.wellesley += 1\n",
    "    \n",
    "def bike_to_olin(state):\n",
    "    \"\"\"Move one bike from Wellesley to Olin.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    \"\"\"\n",
    "    if state.wellesley == 0:\n",
    "        return\n",
    "    state.wellesley -= 1\n",
    "    state.olin += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now if you run the simulation again, it should behave."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "bikeshare = State(olin=10, wellesley=2)\n",
    "run_simulation(bikeshare, 0.4, 0.2, 60)\n",
    "decorate_bikeshare()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Comparison operators"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `if` statements in the previous section used the comparison operator `==`.  The other comparison operators are listed in the book.\n",
    "\n",
    "It is easy to confuse the comparison operator `==` with the assignment operator `=`.\n",
    "\n",
    "Remember that `=` creates a variable or gives an existing variable a new value."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x = 5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Whereas `==` compares two values and returns `True` if they are equal."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x == 5"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can use `==` in an `if` statement."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "yes, x is 5\n"
     ]
    }
   ],
   "source": [
    "if x == 5:\n",
    "    print('yes, x is 5')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But if you use `=` in an `if` statement, you get an error."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# If you remove the # from the if statement and run it, you'll get\n",
    "# SyntaxError: invalid syntax\n",
    "\n",
    "#if x = 5:\n",
    "#    print('yes, x is 5')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Exercise:** Add an `else` clause to the `if` statement above, and print an appropriate message.\n",
    "\n",
    "Replace the `==` operator with one or two of the other comparison operators, and confirm they do what you expect."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Metrics"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that we have a working simulation, we'll use it to evaluate alternative designs and see how good or bad they are.  The metric we'll use is the number of customers who arrive and find no bikes available, which might indicate a design problem."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First we'll make a new `State` object that creates and initializes additional state variables to keep track of the metrics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>olin_empty</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley_empty</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin               10\n",
       "wellesley           2\n",
       "olin_empty          0\n",
       "wellesley_empty     0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bikeshare = State(olin=10, wellesley=2, \n",
    "                  olin_empty=0, wellesley_empty=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we need versions of `bike_to_wellesley` and `bike_to_olin` that update the metrics."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def bike_to_wellesley(state):\n",
    "    \"\"\"Move one bike from Olin to Wellesley.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    \"\"\"\n",
    "    if state.olin == 0:\n",
    "        state.olin_empty += 1\n",
    "        return\n",
    "    state.olin -= 1\n",
    "    state.wellesley += 1\n",
    "    \n",
    "def bike_to_olin(state):\n",
    "    \"\"\"Move one bike from Wellesley to Olin.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    \"\"\"\n",
    "    if state.wellesley == 0:\n",
    "        state.wellesley_empty += 1\n",
    "        return\n",
    "    state.wellesley -= 1\n",
    "    state.olin += 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now when we run a simulation, it keeps track of unhappy customers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "run_simulation(bikeshare, 0.4, 0.2, 60)\n",
    "decorate_bikeshare()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After the simulation, we can print the number of unhappy customers at each location."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bikeshare.olin_empty"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bikeshare.wellesley_empty"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Exercises\n",
    "\n",
    "**Exercise:** As another metric, we might be interested in the time until the first customer arrives and doesn't find a bike.  To make that work, we have to add a \"clock\" to keep track of how many time steps have elapsed:\n",
    "\n",
    "1. Create a new `State` object with an additional state variable, `clock`, initialized to 0. \n",
    "\n",
    "2. Write a modified version of `step` that adds one to the clock each time it is invoked.\n",
    "\n",
    "Test your code by running the simulation and check the value of `clock` at the end."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>olin_empty</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley_empty</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>clock</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin               10\n",
       "wellesley           2\n",
       "olin_empty          0\n",
       "wellesley_empty     0\n",
       "clock               0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bikeshare = State(olin=10, wellesley=2, \n",
    "                  olin_empty=0, wellesley_empty=0,\n",
    "                  clock=0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Solution\n",
    "\n",
    "def step(state, p1, p2):\n",
    "    \"\"\"Simulate one minute of time.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    p1: probability of an Olin->Wellesley customer arrival\n",
    "    p2: probability of a Wellesley->Olin customer arrival\n",
    "    \"\"\"\n",
    "    state.clock += 1\n",
    "    \n",
    "    if flip(p1):\n",
    "        bike_to_wellesley(state)\n",
    "    \n",
    "    if flip(p2):\n",
    "        bike_to_olin(state)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "run_simulation(bikeshare, 0.4, 0.2, 60)\n",
    "decorate_bikeshare()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>olin_empty</th>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley_empty</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>clock</th>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin                1\n",
       "wellesley          11\n",
       "olin_empty          5\n",
       "wellesley_empty     0\n",
       "clock              60\n",
       "dtype: int64"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "bikeshare"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Exercise:** Continuing the previous exercise, let's record the time when the first customer arrives and doesn't find a bike.\n",
    "\n",
    "1. Create a new `State` object with an additional state variable, `t_first_empty`, initialized to -1 as a special value to indicate that it has not been set. \n",
    "\n",
    "2. Write a modified version of `step` that checks whether`olin_empty` and `wellesley_empty` are 0.  If not, it should set `t_first_empty` to `clock` (but only if `t_first_empty` has not already been set).\n",
    "\n",
    "Test your code by running the simulation and printing the values of `olin_empty`, `wellesley_empty`, and `t_first_empty` at the end."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>olin_empty</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley_empty</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>clock</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t_first_empty</th>\n",
       "      <td>-1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin               10\n",
       "wellesley           2\n",
       "olin_empty          0\n",
       "wellesley_empty     0\n",
       "clock               0\n",
       "t_first_empty      -1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "bikeshare = State(olin=10, wellesley=2, \n",
    "                  olin_empty=0, wellesley_empty=0,\n",
    "                  clock=0, t_first_empty=-1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Solution\n",
    "\n",
    "def step(state, p1, p2):\n",
    "    \"\"\"Simulate one minute of time.\n",
    "    \n",
    "    state: bikeshare State object\n",
    "    p1: probability of an Olin->Wellesley customer arrival\n",
    "    p2: probability of a Wellesley->Olin customer arrival\n",
    "    \"\"\"\n",
    "    state.clock += 1\n",
    "    \n",
    "    if flip(p1):\n",
    "        bike_to_wellesley(state)\n",
    "    \n",
    "    if flip(p2):\n",
    "        bike_to_olin(state)\n",
    "        \n",
    "    if state.t_first_empty != -1:\n",
    "        return\n",
    "    \n",
    "    if state.olin_empty + state.wellesley_empty > 0:\n",
    "        state.t_first_empty = state.clock"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "run_simulation(bikeshare, 0.4, 0.2, 60)\n",
    "decorate_bikeshare()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>values</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>olin</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley</th>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>olin_empty</th>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>wellesley_empty</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>clock</th>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t_first_empty</th>\n",
       "      <td>30</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "olin                0\n",
       "wellesley          12\n",
       "olin_empty          8\n",
       "wellesley_empty     0\n",
       "clock              60\n",
       "t_first_empty      30\n",
       "dtype: int64"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Solution\n",
    "\n",
    "bikeshare"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
